package com.kylin.job;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author kylin
 */
@Component
public class DemoJob {
    private Logger logger = LoggerFactory.getLogger(getClass());

    private final AtomicInteger counts = new AtomicInteger();

    /**
     * 每两秒钟执行一次
     *
     * cron 属性：Spring Cron 表达式。例如说，"0 0 12 * * ?" 表示每天中午执行一次，"11 11 11 11 11 ?" 表示 11 月 11 号 11 点 11 分 11 秒执行一次（哈哈哈）
     * 注意，以调用完成时刻为开始计时时间。
     *
     * fixedDelay 属性：固定执行间隔，单位：毫秒。注意，以调用完成时刻为开始计时时间。
     *
     * fixedRate 属性：固定执行间隔，单位：毫秒。注意，以调用开始时刻为开始计时时间。
     *
     *
     * 不常用属性如下：
     *      initialDelay 属性：初始化的定时任务执行延迟，单位：毫秒。
     *      zone 属性：解析 Spring Cron 表达式的所属的时区。默认情况下，使用服务器的本地时区。
     *      initialDelayString 属性：initialDelay 的字符串形式。
     *      fixedDelayString 属性：fixedDelay 的字符串形式。
     *      fixedRateString 属性：fixedRate 的字符串形式。
     */
    @Scheduled(fixedRate = 2000)
    public void execute() {
        logger.info("[execute][定时第 ({}) 次执行]", counts.incrementAndGet());
    }
}
